/*
 * 描          述:  <描述>
 * 修  改   人:  PengQingyang
 * 修改时间:  2022年10月6日
 * <修改描述:>
 */
package com.tx.core.generator.model;

/**
 * 属性实体<br/>
 * <功能详细描述>
 *
 * @author PengQingyang
 * @version [版本号, 2022年10月6日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public interface EntityProperty {

    /**
     * 是否是枚举
     *
     * @return
     */
    public boolean isEnum();

    /**
     * 是否是基础数据枚举<br/>
     *
     * @return
     */
    public boolean isBasicdataEnum();

    /**
     * 是否是基础数据类型<br/>
     *
     * @return
     */
    public boolean isBasicdataType();

    /**
     * 属性是否是简单类型
     * <功能详细描述>
     *
     * @return [参数说明]
     * @return boolean [返回类型说明]
     * @throws throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public boolean isSimpleValueType();

    /**
     * 是否是基本类型<br/>
     * 基本类型有默认值，在update生成sqlMap中需要参考该属性
     *
     * @return
     */
    public boolean isPrimitiveType();

    /**
     * 获取属性注释<br/>
     *
     * @return
     */
    public String getPropertyComment();

    /**
     * 是否是主键: 不根据属性判断，如果不存在@Id注解时，系统将考虑采用id,或是code字段当做唯一键字段
     *
     * @return
     */
    public boolean isPrimaryKey();

    /**
     * 获取属性读取方法名<br/>
     * <功能详细描述>
     *
     * @return [参数说明]
     * @return String [返回类型说明]
     * @throws throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public String getPropertyReadMethodName();

    /**
     * 获取属性名
     * <功能详细描述>
     *
     * @return [参数说明]
     * @return String [返回类型说明]
     * @throws throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public String getPropertyName();

    /**
     * 获取属性类型名
     * <功能详细描述>
     *
     * @return [参数说明]
     * @return String [返回类型说明]
     * @throws throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public String getPropertyTypeName();

    /**
     * 获取属性类型simpleName(不含包路径)
     * <功能详细描述>
     *
     * @return [参数说明]
     * @return String [返回类型说明]
     * @throws throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public String getPropertyTypeSimpleName();
    
    /**
     * 字段名
     * <功能详细描述>
     *
     * @return [参数说明]
     * @return String [返回类型说明]
     * @throws throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public String getColumnName();

    /**
     * 字段属性名
     * <功能详细描述>
     *
     * @return [参数说明]
     * @return String [返回类型说明]
     * @throws throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public String getColumnPropertyName();

    /**
     * 获取字段属性类型名<br/>
     * <功能详细描述>
     *
     * @return [参数说明]
     * @return String [返回类型说明]
     * @throws throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public String getColumnPropertyTypeName();

    /**
     * 获取字段属性类型SimpleName<br/>
     * <功能详细描述>
     *
     * @return [参数说明]
     * @return String [返回类型说明]
     * @throws throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public String getColumnPropertyTypeSimpleName();

    /**
     * 是否可为空
     *
     * @return
     */
    public boolean isNullable();

    /**
     * length
     *
     * @return
     */
    public int getLength();

    /**
     * precision
     *
     * @return
     */
    public int getPrecision();

    /**
     * scale
     *
     * @return
     */
    public int getScale();

    /**
     * 是否唯一键<br/>
     *
     * @return
     */
    public boolean isUnique();

    /**
     * 是否可插入
     *
     * @return
     */
    public boolean isInsertable();

    /**
     * 是否可更新
     *
     * @return
     */
    public boolean isUpdatable();

    /**
     * 获取验证表达式
     *
     * @return
     */
    public String getValidateExpression();

    /**
     * 写入验证表达式
     *
     * @param validateExpression
     */
    public void setValidateExpression(String validateExpression);
    
    public String getColumnType();
    
    public void setColumnType(String columnType);
}
